package xg2013.totoro.domain;

import java.util.Collection;

import javax.persistence.CascadeType;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;

import com.sun.xml.internal.bind.CycleRecoverable;

/**
 * @generated
 */
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Tutor extends Actor{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	/**
	 * @generated
	 */
	@OneToMany(mappedBy = "issuer",cascade = CascadeType.ALL)
	private Collection<Notice> notices;
	/**
	 * @generated
	 */
	@Embedded
	private Contact contact;
	/**
	 * @generated
	 */
	@ManyToOne
	@JoinColumn(name = "department_id")
	private Department department;
	/**
	 * @generated
	 */
	@OneToMany(mappedBy = "proposer")
	private Collection<GraduateProject> graduateProjects;
	/**
	 * @generated
	 */
	@ManyToOne
	@JoinColumn(name = "proTitle_id")
	private ProTitle proTitle;
	/**
	 * @generated
	 */
	@OneToMany(mappedBy = "member")
	private Collection<TutorAsMemberToReplyGroup> tutorAsMemberToReplyGroups;
	/**
	 * @generated
	 */
	@OneToMany(mappedBy = "leader")
	private Collection<ReplyGroup> tutorAsLeaderToReplyGroups;
	/**
	 * @generated
	 */
	@OneToMany(mappedBy = "chiefTutor")
	private Collection<GraduateProject> chiefGraduateProjects;

	/**
	 * @generated
	 */
	@OneToMany(mappedBy = "tutor",cascade = CascadeType.ALL)
	private Collection<CoTutorage> coTutorages;
	/**
	 * @generated
	 */
	@OneToOne
	@JoinColumn(name = "audit_id")
	private Audit audit;
	/**
	 * @generated
	 */
	@OneToMany(mappedBy = "reviewer",cascade = CascadeType.ALL)
	private Collection<GraduateProject> graduateProjectsToReview;
	@OneToMany
    private java.util.Collection<RemarkTemplate> remarkTemplatesOfTutor;
	@OneToMany(mappedBy = "proposer",cascade = CascadeType.ALL)
    private java.util.Collection<RemarkTemplate> remarkTemplatesProposer;
	public Collection<Notice> getNotices() {
		return notices;
	}
	public void setNotices(Collection<Notice> notices) {
		this.notices = notices;
	}
	public Contact getContact() {
		return contact;
	}
	public java.util.Collection<RemarkTemplate> getRemarkTemplatesOfTutor() {
		return remarkTemplatesOfTutor;
	}
	public void setRemarkTemplatesOfTutor(
			java.util.Collection<RemarkTemplate> remarkTemplatesOfTutor) {
		this.remarkTemplatesOfTutor = remarkTemplatesOfTutor;
	}
	public java.util.Collection<RemarkTemplate> getRemarkTemplatesProposer() {
		return remarkTemplatesProposer;
	}
	public void setRemarkTemplatesProposer(
			java.util.Collection<RemarkTemplate> remarkTemplatesProposer) {
		this.remarkTemplatesProposer = remarkTemplatesProposer;
	}
	public void setContact(Contact contact) {
		this.contact = contact;
	}
	public Department getDepartment() {
		return department;
	}
	public void setDepartment(Department department) {
		this.department = department;
	}
	public Collection<GraduateProject> getGraduateProjects() {
		return graduateProjects;
	}
	public void setGraduateProjects(Collection<GraduateProject> graduateProjects) {
		this.graduateProjects = graduateProjects;
	}
	public ProTitle getProTitle() {
		return proTitle;
	}
	public void setProTitle(ProTitle proTitle) {
		this.proTitle = proTitle;
	}
	public Collection<TutorAsMemberToReplyGroup> getTutorAsMemberToReplyGroups() {
		return tutorAsMemberToReplyGroups;
	}
	public void setTutorAsMemberToReplyGroups(
			Collection<TutorAsMemberToReplyGroup> tutorAsMemberToReplyGroups) {
		this.tutorAsMemberToReplyGroups = tutorAsMemberToReplyGroups;
	}
	public Collection<ReplyGroup> getTutorAsLeaderToReplyGroups() {
		return tutorAsLeaderToReplyGroups;
	}
	public void setTutorAsLeaderToReplyGroups(
			Collection<ReplyGroup> tutorAsLeaderToReplyGroups) {
		this.tutorAsLeaderToReplyGroups = tutorAsLeaderToReplyGroups;
	}
	public Collection<GraduateProject> getChiefGraduateProjects() {
		return chiefGraduateProjects;
	}
	public void setChiefGraduateProjects(
			Collection<GraduateProject> chiefGraduateProjects) {
		this.chiefGraduateProjects = chiefGraduateProjects;
	}
	
	public Collection<CoTutorage> getCoTutorages() {
		return coTutorages;
	}
	public void setCoTutorages(Collection<CoTutorage> coTutorages) {
		this.coTutorages = coTutorages;
	}
	public Audit getAudit() {
		return audit;
	}
	public void setAudit(Audit audit) {
		this.audit = audit;
	}
	public Collection<GraduateProject> getGraduateProjectsToReview() {
		return graduateProjectsToReview;
	}
	public void setGraduateProjectsToReview(
			Collection<GraduateProject> graduateProjectsToReview) {
		this.graduateProjectsToReview = graduateProjectsToReview;
	}
	
}